/*
 * Copyright (c) 2010 Marc Poppleton
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.marcpoppleton.strawberry.helper;

public final class DoFHelper {
	
	public static DoFData compute(float coc,float focal,float aperture,float distance,float units){

		//We work in mm, we'll convert everything back to the requested unit at the end
		distance = distance*1000*units;
		float hyperFocal = (focal * focal) / (aperture * coc) + focal;   
		float dofNear = ((hyperFocal - focal) * distance) / (hyperFocal + distance - (2*focal));
		
		float dofFar = 0.0F;
		dofFar = ((hyperFocal-focal) * distance) / (hyperFocal - distance);

		// There, happy?
		hyperFocal = (float) (hyperFocal / 1000.0 / units);
		dofNear = (float) (dofNear / 1000.0 / units);
		dofFar  = (float) (dofFar / 1000.0 / units);
		distance = (float) (distance / 1000.0 / units);		
		
		return new DoFData(hyperFocal,dofNear,dofFar,distance);
	}
}
